//
//  BaseTableViewController.swift
//  BaseProj
//
//  Created by 陈宇 on 2017/4/26.
//  Copyright © 2017年 科匠武汉. All rights reserved.
//

import UIKit
import PullToRefresh

class BaseTableViewController<BeanType: BaseBean>: BaseViewController, UITableViewDataSource, UITableViewDelegate {
    
    var tableStyle: UITableViewStyle {
        return .plain
    }
    
    var topRefreshable: Bool {
        return false
    }
    
    var bottomRefreshable: Bool {
        return false
    }
    
    var tableView: UITableView! = nil
    
    lazy var dataSource: [[BeanType]] = []
    
    override func loadView() {
        super.loadView()
        configureTableView()
    }
    
    deinit {
//        tableView.removeAllPullToRefresh()
    }
    
    override func configureUI() {
        super.configureUI()
        
        if topRefreshable {
            tableView.addPullToRefresh(PullToRefresh()) { [weak self] in
                self?.refreshing(.top)
            }
        }
        
        if bottomRefreshable {
            tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { [weak self] in
                self?.refreshing(.bottom)
            }
        }
    }
    
    func refreshing(_ position: Position) {
        log.warning("子类override此方法刷新数据...".localized())
    }
    
    // MARK: - UITableView相关数据源方法以及代理方法
    func numberOfSections(in tableView: UITableView) -> Int {
        return dataSource.count
    }
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource[section].count
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        fatalError("子类必须实现此方法配置对应Cell".localized())
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

extension BaseTableViewController {
    
    // MARK: - 配置TableView, 子类复写此方法, 配置个性属性。
    func configureTableView() {
        tableView = UITableView(frame: view.bounds, style: tableStyle)
        tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        tableView.dataSource = self
        tableView.delegate = self
        tableView.hideEmpty()
        view.addSubview(tableView)
    }
}
